{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "1a11af0a-aa48-4fef-ae12-726d96db0be5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "数据的随机 5 个样本：\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>feature</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>79</th>\n",
       "      <td>-1.987569</td>\n",
       "      <td>-4.366856</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>0.241962</td>\n",
       "      <td>3.138595</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>204</th>\n",
       "      <td>-1.377669</td>\n",
       "      <td>-2.458329</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>137</th>\n",
       "      <td>-0.322062</td>\n",
       "      <td>0.343765</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>-0.234587</td>\n",
       "      <td>1.915147</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      feature    target\n",
       "79  -1.987569 -4.366856\n",
       "12   0.241962  3.138595\n",
       "204 -1.377669 -2.458329\n",
       "137 -0.322062  0.343765\n",
       "99  -0.234587  1.915147"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "预测值的平均绝对误差：0.37501212925912386\n",
      "预测值的均方误差：0.22769102622752183\n",
      "R² 得分：0.9731339651911699\n",
      "模型得分：0.9731339651911699\n",
      "一元线性回归模型系数： 3.006236642970009\n",
      "一元线性回归模型常数项： 1.9907340358980383\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\Program\\anaconda\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30446 (\\N{CJK UNIFIED IDEOGRAPH-76EE}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\Program\\anaconda\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 26631 (\\N{CJK UNIFIED IDEOGRAPH-6807}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\Program\\anaconda\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 20540 (\\N{CJK UNIFIED IDEOGRAPH-503C}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\Program\\anaconda\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 19968 (\\N{CJK UNIFIED IDEOGRAPH-4E00}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\Program\\anaconda\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 20803 (\\N{CJK UNIFIED IDEOGRAPH-5143}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\Program\\anaconda\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 32447 (\\N{CJK UNIFIED IDEOGRAPH-7EBF}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\Program\\anaconda\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 24615 (\\N{CJK UNIFIED IDEOGRAPH-6027}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\Program\\anaconda\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 22238 (\\N{CJK UNIFIED IDEOGRAPH-56DE}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\Program\\anaconda\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 24402 (\\N{CJK UNIFIED IDEOGRAPH-5F52}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\Program\\anaconda\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 65306 (\\N{FULLWIDTH COLON}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\Program\\anaconda\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 23454 (\\N{CJK UNIFIED IDEOGRAPH-5B9E}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\Program\\anaconda\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 38469 (\\N{CJK UNIFIED IDEOGRAPH-9645}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\Program\\anaconda\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 39044 (\\N{CJK UNIFIED IDEOGRAPH-9884}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\Program\\anaconda\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 27979 (\\N{CJK UNIFIED IDEOGRAPH-6D4B}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\Program\\anaconda\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 29305 (\\N{CJK UNIFIED IDEOGRAPH-7279}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\Program\\anaconda\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 24449 (\\N{CJK UNIFIED IDEOGRAPH-5F81}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "image/png": "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cty7AwBo3whDSC0vvihdfnng9ZqawLL0AACIaTKkkksuCQxCw4db02IEIQCAA0aGkPz27pWyswOvL14sXXVV/PsDAEgqhCEkt2XLrIXSLX36qZSTE//+AACSDtNkSF7FxYFB6IILJNMkCAEAwsbIEJLPp59KubmB18vLpSuuiH9/AABJLWlGhgoLC2UYht/X7bffHvQZ0zQ1Z84c9enTR126dNGIESP03nvvxanHiInFi+2D0J49BCEAQKskTRiSpHvuuUe1tbVNX3fddVfQ9vfdd59+//vf66GHHtLGjRuVm5urCy+8UJ9//nmceoyoMU1p6FBp4kT/65deat3r2TMx/QIAJL2kmibr1q2bcu1GBWyYpqnS0lLdeeedKikpkSQ99dRT6t27txYtWqQf//jHsewqoqmmRurbN/D6ypXWdnoAANogqUaGfvvb36pnz5769re/rV//+tc6fPiwY9vKykrV1dVp5MiRTdcyMjJ0/vnna/369fHoLqKhrMw+CO3bRxACAERF0owM3XrrrTrzzDN1wgknaMOGDZo9e7YqKyv15z//2bZ9XV2dJKl3795+13v37q3t27c7fk5DQ4MaGhqaXns8nij0HhEzTemb35Tefdf/+ve/Ly1Zkpg+AQBSUkJHhubMmROwKLrl16ZNmyRJM2bM0Pnnn69vfvObuuGGG7RgwQItXLhQe/fuDfoZhmH4vTZNM+Bac/PmzVNWVlbTVwEFPeNvxw4pLS0wCL3yCkEIABB1CR0ZmjZtmq4KcUJwYWGh7fWhQ4dKkj766CP1tFk861tbVFdXp7xmpRh27doVMFrU3OzZszVz5sym1x6Ph0AUT489Jk2dGnjd45G6dYt/fwAAKS+hYSg7O1vZdmUUwrB582ZJ8gs6zQ0YMEC5ublavXq1zjjjDEnS4cOHtXbtWv32t791fN+MjAxlZGS0qk9og8ZGaeBA6ZNP/K9PnmxVmwcAIEaSYs3Qm2++qbfeekvFxcXKysrSxo0bNWPGDF1++eXq169fU7tTTz1V8+bN0xVXXCHDMDR9+nTde++9GjhwoAYOHKh7771XXbt21cSW27ORWJ98Ip10UuD1igrp/PPj3h0AgLskRRjKyMjQkiVLNHfuXDU0NKh///668cYbddttt/m127p1q+rr65te33bbbfriiy900003ad++fTrnnHP0yiuvqBvT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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score\n",
    "\n",
    "\n",
    "np.random.seed(42)\n",
    "n_samples = 300\n",
    "\n",
    "X = np.random.randn(n_samples, 1)\n",
    "\n",
    "true_coef = 3\n",
    "intercept = 2\n",
    "\n",
    "y = true_coef * X + intercept + np.random.randn(n_samples, 1) * 0.5\n",
    "\n",
    "\n",
    "data = pd.DataFrame(X, columns=['feature'])\n",
    "data['target'] = y\n",
    "\n",
    "\n",
    "print(\"数据的随机 5 个样本：\")\n",
    "display(data.sample(5))\n",
    "\n",
    "\n",
    "y = data['target']\n",
    "X = data[['feature']]\n",
    "\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)\n",
    "\n",
    "\n",
    "model = LinearRegression()\n",
    "model.fit(X_train, y_train)\n",
    "\n",
    "\n",
    "y_pred = model.predict(X_test)\n",
    "\n",
    "\n",
    "mae = mean_absolute_error(y_test, y_pred)\n",
    "mse = mean_squared_error(y_test, y_pred)\n",
    "r2 = r2_score(y_test, y_pred)\n",
    "model_score = model.score(X_test, y_test)\n",
    "\n",
    "\n",
    "print(f'预测值的平均绝对误差：{mae}')\n",
    "print(f'预测值的均方误差：{mse}')\n",
    "print(f'R² 得分：{r2}')\n",
    "print(f'模型得分：{model_score}')\n",
    "\n",
    "\n",
    "print('一元线性回归模型系数：', model.coef_[0])\n",
    "print('一元线性回归模型常数项：', model.intercept_)\n",
    "\n",
    "\n",
    "plt.scatter(X_test, y_test, color='blue', label='实际值')\n",
    "plt.plot(X_test, y_pred, color='red', linewidth=2, label='预测值')\n",
    "plt.xlabel('特征')\n",
    "plt.ylabel('目标值')\n",
    "plt.title('一元线性回归：实际值 vs 预测值')\n",
    "plt.legend()\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ee8384f1-9983-4489-9c87-a7806ae6584d",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:base] *",
   "language": "python",
   "name": "conda-base-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
